package org.aplombh.java.awcing.basic.struct.heap;

import java.util.Scanner;

/**
 * 输入一个长度为 n 的整数数列，从小到大输出前 m 小的数。
 * <p>
 * 输入格式
 * 第一行包含整数 n 和 m。
 * <p>
 * 第二行包含 n 个整数，表示整数数列。
 * <p>
 * 输出格式
 * 共一行，包含 m 个整数，表示整数数列中前 m 小的数。
 * <p>
 * 数据范围
 * 1≤m≤n≤105，
 * 1≤数列中元素≤109
 * 输入样例：
 * 5 3
 * 4 5 1 3 2
 * 输出样例：
 * 1 2 3
 */

public class HeapSort_838 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();

        int[] h = new int[n + 1];
        for (int i = 1; i <= n; i++) h[i] = scanner.nextInt();
        HeapSort heapSort = new HeapSort(h, n);


        for (int i = n / 2; i != 0; i--) heapSort.down(i);

        heapSort.print(m);
    }
}

class HeapSort {
    private static final int N = 100010;
    int[] h;
    int tsize;

    HeapSort() {
        h = new int[N];
        tsize = 0;
    }

    HeapSort(int[] h, int tsize) {
        this.h = h;
        this.tsize = tsize;
    }

    public void down(int u) {
        int t = u;

        // 如果当前位置有左孩子,并且左孩子小于它,交换左孩子与它的位置
        // If the current position has a left child and the left child is smaller than it,
        // swap the left child with its position
        if (u * 2 <= tsize && h[u * 2] < h[t]) t = u * 2;

        // 同理
        // From what has been discussed above
        // 为什么不是else，因为要保证当前位置的左孩子、当前节点、当前位置的右孩子保持连续
        if (u * 2 + 1 <= tsize && h[u * 2 + 1] < h[t]) t = u * 2 + 1;

        if (u != t) {
            int x = h[u];
            h[u] = h[t];
            h[t] = x;

            // 递归down左孩子或右孩子
            // Recurse down left child or right child
            down(t);
        }
    }

    public void print(int m) {
        // 先输出最小值，然后将最小值的位置值赋为最大值，将该值down下去
        // Print the minimum,
        // and then the position value of the minimum value is assigned to the maximum value,
        // and then down the value
        while (m-- != 0) {
            System.out.println(h[1]);
            h[1] = h[tsize];
            tsize--;
            down(1);
        }
    }
}